#pragma once
#ifndef PI
#define PI 3.141592654f
#endif
class BaseVector;
class Matrix
{
public:
	Matrix(int m = 1, int n = 1, double values[] = nullptr);
	Matrix(int m, int n, BaseVector vectors[], bool isHorizontal = false);
	Matrix(const Matrix& mat);
	~Matrix();
	void SetValues(double values[]);
	void SetValues(BaseVector vectors[], bool isHorizontal = false);
	double *GetValues() const;
	Matrix Transfer();
	BaseVector ToVector();
	Matrix& operator=(Matrix& A);
public:
	int m;
	int n;
public:
	double **data;

	friend Matrix operator*(Matrix A, Matrix B);
	friend Matrix operator+(Matrix A, Matrix B);
	friend Matrix operator+=(Matrix& A, Matrix B);
	friend Matrix operator/(Matrix A, double k);
	friend Matrix operator/=(Matrix& A, double k);
};

